import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from nltk.tokenize import TweetTokenizer
from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer
from textblob import TextBlob
import seaborn as sns
import string
import plotly.express as px
#Load the modified dataset with the translations
tweets_df = pd.read_csv('modified_with_length.csv')
tweets_df.head()
| Username | Date | Followers | Source | Location | Tweet | length | Tweet_without_stopwords | Translated | |
|---|---|---|---|---|---|---|---|---|---|
| 0 | CaeruleusCalva | 4. August 2021 | 1088.0 | Twitter for Android | Not So Ancient Greece | οπως λενε και οι καθηγητες ωρλ τα ανεμβολιαστα... | 245 | λενε καθηγητες ωρλ ανεμβολιαστα ζωα πεθαινουν ... | say teachers unvaccinated animals die coronavi... |
| 1 | kambanellas | 4. August 2021 | 316.0 | Twitter for Android | Cyprus | δυστυχως τα δεδομενα δεν αλλαζουν ειτε σου αρε... | 206 | δυστυχως δεδομενα αλλαζουν ειτε αρεσει ειτε οχ... | unfortunately data changes whether you like it... |
| 2 | em56464 | 4. August 2021 | 116.0 | Twitter Web App | prefer not to say | χειροκροτουν τους πυροσβεστες μεχρι να σβησει ... | 114 | χειροκροτουν πυροσβεστες μεχρι σβησει φωτια κα... | applause firefighters until fire extinguished ... |
| 3 | zetakosmatougk | 4. August 2021 | 2955.0 | Twitter for Android | greece | εχετε μισο λεπτο να σας μιλησω για το εμβολιο ... | 113 | εχετε μισο λεπτο μιλησω μητσοτακηκαθαρμα φωτι… | you have half a minute to talk mitsotaki fucki... |
| 4 | PeterParker_84 | 4. August 2021 | 149.0 | Twitter Web App | Timbuktu Κάτω Αχαίας | σκεψου ουτε οι ιδιοι δεν εμπιστευονται το εμβο... | 55 | σκεψου ιδιοι εμπιστευονται | they dont even trust the vaccine |
#Make english text lowercase
to_lowercase = lambda x : str(x).lower()
tweets_df['Translated'] = tweets_df.Translated.apply(to_lowercase)
#Remove english punctuations
remove_puncs = lambda x: x.translate(str.maketrans('','',string.punctuation))
tweets_df['Translated'] = tweets_df.Translated.apply(remove_puncs)
tweets_df['Translated']
0 say teachers unvaccinated animals die coronavi...
1 unfortunately data changes whether you like it...
2 applause firefighters until fire extinguished ...
3 you have half a minute to talk mitsotaki fucki...
4 they dont even trust the vaccine
...
25334 truths lies
25335 we finally made fires
25336 immunity is maintained for at least months
25337 heatwave femicide vaccination
25338 greece red list israel who returns israel coun...
Name: Translated, Length: 25339, dtype: object
#Make a copy of our data
textblob_analysis = tweets_df.copy()
#Create polarity with textblob column
textblob_analysis["Polarity"] = textblob_analysis["Translated"].apply(lambda word: TextBlob(str(word)).sentiment.polarity)
labelize_textblob = lambda x : 'neutral' if x==0 else('positive' if x>0 else 'negative')
textblob_analysis['label'] = textblob_analysis.Polarity.apply(labelize_textblob)
textblob_analysis.head()
| Username | Date | Followers | Source | Location | Tweet | length | Tweet_without_stopwords | Translated | Polarity | label | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | CaeruleusCalva | 4. August 2021 | 1088.0 | Twitter for Android | Not So Ancient Greece | οπως λενε και οι καθηγητες ωρλ τα ανεμβολιαστα... | 245 | λενε καθηγητες ωρλ ανεμβολιαστα ζωα πεθαινουν ... | say teachers unvaccinated animals die coronavi... | 0.000000 | neutral |
| 1 | kambanellas | 4. August 2021 | 316.0 | Twitter for Android | Cyprus | δυστυχως τα δεδομενα δεν αλλαζουν ειτε σου αρε... | 206 | δυστυχως δεδομενα αλλαζουν ειτε αρεσει ειτε οχ... | unfortunately data changes whether you like it... | -0.500000 | negative |
| 2 | em56464 | 4. August 2021 | 116.0 | Twitter Web App | prefer not to say | χειροκροτουν τους πυροσβεστες μεχρι να σβησει ... | 114 | χειροκροτουν πυροσβεστες μεχρι σβησει φωτια κα... | applause firefighters until fire extinguished ... | 0.000000 | neutral |
| 3 | zetakosmatougk | 4. August 2021 | 2955.0 | Twitter for Android | greece | εχετε μισο λεπτο να σας μιλησω για το εμβολιο ... | 113 | εχετε μισο λεπτο μιλησω μητσοτακηκαθαρμα φωτι… | you have half a minute to talk mitsotaki fucki... | -0.166667 | negative |
| 4 | PeterParker_84 | 4. August 2021 | 149.0 | Twitter Web App | Timbuktu Κάτω Αχαίας | σκεψου ουτε οι ιδιοι δεν εμπιστευονται το εμβο... | 55 | σκεψου ιδιοι εμπιστευονται | they dont even trust the vaccine | 0.000000 | neutral |
textblob_analysis.Polarity.describe()
count 25339.000000 mean 0.028353 std 0.238317 min -1.000000 25% 0.000000 50% 0.000000 75% 0.100000 max 1.000000 Name: Polarity, dtype: float64
#drop english column
textblob_analysis.drop('Translated', axis=1, inplace=True)
Τα πιο θετικά και πιο αρνητικά tweets που εντόπησε η μέθοδος.
textblob_analysis[textblob_analysis.Polarity == -1.000000]
| Username | Date | Followers | Source | Location | Tweet | length | Tweet_without_stopwords | Polarity | label | |
|---|---|---|---|---|---|---|---|---|---|---|
| 792 | synday576 | 1. August 2021 | 346.0 | Twitter for Android | limassol cyprus | μερες τρομερης φοβερης πανδημιας στη κυπρ... | 104 | μερες τρομερης φοβερης πανδημιας κυπρο δηλωνον... | -1.0 | negative |
| 2412 | MyVolos.Net | 26. July 2021 | 940.0 | Twitter Web App | VOLOS | μαθημα ζωης ο συζυγος της χρονης απο την κρητη... | 126 | μαθημα ζωης συζυγος χρονης κρητη πεθανε κανει ... | -1.0 | negative |
| 2477 | presshub.gr | 26. July 2021 | 19470.0 | presshub.gr | Ελλάς | κλικ και διαβαστε στο συγκλονιστικη αναρτηση ... | 133 | κλικ διαβαστε συγκλονιστικη αναρτηση γιατρου κ... | -1.0 | negative |
| 2488 | iefimerida | 26. July 2021 | 135391.0 | Echobox | Greece | μαθημα ζωης ο συζυγος της χρονης απο την κρητη... | 127 | μαθημα ζωης συζυγος χρονης κρητη πεθανε κανει ... | -1.0 | negative |
| 2684 | GG | 26. July 2021 | 386.0 | Twitter for iPhone | prefer not to say | εχω κανει το εμβολιο οποτε μην ξεκινας αηδιες... | 161 | κανει οποτε ξεκινας αηδιες ψεκασμενο ομως χωρι... | -1.0 | negative |
| 2697 | THIVAHELLAS | 26. July 2021 | 5672.0 | Twitter Web App | HELLAS | αποσυρονται τα τεστ ως αναξιοπιστα θυμηθειτε ... | 123 | αποσυρονται τεστ ως αναξιοπιστα θυμηθειτε υστε... | -1.0 | negative |
| 3368 | Χρήστος Ηλιάδης | 25. July 2021 | 324.0 | Twitter for Android | prefer not to say | η αλεξανδρουπολη κατα της υποχρεωτικοτητας και... | 230 | αλεξανδρουπολη υποχρεωτικοτητας αθλιων μετρων ... | -1.0 | negative |
| 3398 | Cat Ballou | 25. July 2021 | 387.0 | Twitter for Android | prefer not to say | δεν κουνιεται το βλεφαρο απο το αλλα το εμβο... | 61 | κουνιεται βλεφαρο κακο | -1.0 | negative |
| 5589 | Γιώργος Παπαιωάννου | 23. July 2021 | 260.0 | Twitter for Android | Καστρί | οντως συγκλονιστικη περιγραφη θα επρεπε να την... | 117 | οντως συγκλονιστικη περιγραφη επρεπε ακουσουν ... | -1.0 | negative |
| 5996 | τομπακλαβαδογλύκι | 23. July 2021 | 154.0 | Twitter for Android | prefer not to say | η δοση εμβολιο πυρετος κοπωση και φρικτοι πον... | 157 | δοση πυρετος κοπωση φρικτοι πονοι κοκαλα εχθρο... | -1.0 | negative |
| 7430 | qohelet | 22. July 2021 | 60.0 | Twitter Web App | prefer not to say | κυβερνηση χρησιμοποιει ανηθικους και αθλιους ... | 264 | κυβερνηση χρησιμοποιει ανηθικους αθλιους εκβια... | -1.0 | negative |
| 8650 | maskofonias | 16. Jul. 2021 | 2828.0 | Twitter for iPhone | prefer not to say | εκανε το εμβολιο ενας φιλος μου και μ επιασε μ... | 64 | εκανε ενας φιλος μ επιασε υπνηλια τρομερη | -1.0 | negative |
| 9925 | 2etonne2p | 17. Jul. 2021 | 1112.0 | Twitter Web App | prefer not to say | να πουμε κι ενα ευχαριστω στους πυροβολημενους... | 254 | πουμε ευχαριστω πυροβολημενους αντιεμβολιαστες... | -1.0 | negative |
| 12038 | ellinidag | 17. Jul. 2021 | 146.0 | Twitter for Android | Αχαρνές, Ελλάς | εχω περιεργεια να μαθω τι κομμα ψηφισαν αυτα τ... | 133 | περιεργεια μαθω κομμα ψηφισαν κρουσματα μυκονο... | -1.0 | negative |
| 14131 | EmperorFry | 19. Jul. 2021 | 5449.0 | Twitter Web App | prefer not to say | να εστιασουμε στο οτι παροτρυνε να εμβολιαστου... | 104 | εστιασουμε παροτρυνε εμβολιαστουμε αφησουμε γν... | -1.0 | negative |
| 14223 | Nuremberg_2 | 19. Jul. 2021 | 1767.0 | Twitter Web App | Greece | παιδια καθιστε εχω συνταρακτικη αποκαλυψη πριν... | 133 | παιδια καθιστε συνταρακτικη αποκαλυψη βγουν εμ... | -1.0 | negative |
| 16185 | jesuisblock | 20. Jul. 2021 | 1228.0 | Twitter for iPhone | Bangkok, Thailand | θυμαστε που καθε φορα υπηρχε ενα σχεδιο για κα... | 139 | θυμαστε καθε φορα υπηρχε σχεδιο καποιο αναπτυξ... | -1.0 | negative |
| 16810 | DJTONYS | 20. Jul. 2021 | 59.0 | Twitter Web App | ΓΛΥΦΑΔΑ ΝΟΤΙΑ- ΤΗΝΟΣ ΚΥΚΛΑΔΕΣ | για ολους εσας που τρεξατε να βαλετε τον εβραι... | 104 | ολους εσας τρεξατε βαλετε εβραιο μεσα ειδηση σ... | -1.0 | negative |
| 17040 | chalkiasathanas | 20. Jul. 2021 | 214.0 | Twitter Web App | Bruxelles, Belgique | ειδηση σοκ για οσους εκανν εμβολιο και μεσω | 47 | ειδηση σοκ οσους εκανν μεσω | -1.0 | negative |
| 17313 | oldschoolitems1 | 21. Jul. 2021 | 1481.0 | Twitter for Android | European Union | πλεον οι αντιεμβολιαστες εχουν χασει κ την ανθ... | 94 | πλεον αντιεμβολιαστες χασει ανθρωπια νομιζω σο... | -1.0 | negative |
| 17467 | Kallkall14 | 21. Jul. 2021 | 1161.0 | Twitter Web App | prefer not to say | ξευτιλες συνδικαλες πουανακια του συστηματος τ... | 66 | ξευτιλες συνδικαλες πουανακια συστηματος τιποτ... | -1.0 | negative |
| 17959 | TzinaVsl | 21. Jul. 2021 | 3.0 | Twitter for Android | prefer not to say | επισης μιλαω για την αποδοση τουξεκολλατε λιγο... | 102 | επισης μιλαω αποδοση τουξεκολλατε λιγο μερικοι... | -1.0 | negative |
| 18152 | antivaxgr | 22. Jul. 2021 | 1437.0 | Twitter Web App | Νέο Ψυχικό | οι αντιεμβολιαστες ειναι για την κυβερνηση σαν... | 151 | αντιεμβολιαστες κυβερνηση κουρτινα ντουζιερας ... | -1.0 | negative |
| 18157 | jigoleleta | 22. Jul. 2021 | 30.0 | Twitter for Android | Αττική, Ελλάς | εμβολιαστειτε σιχαμενοι αντιεμβολιαστες εμβολι... | 124 | εμβολιαστειτε σιχαμενοι αντιεμβολιαστες εμβολι... | -1.0 | negative |
| 18860 | Elizah_Manolia | 13. Jul. 2021 | 219.0 | Twitter for Android | prefer not to say | «στην περιπτωση της θανουσης ασθενους του γκν ... | 128 | «στην περιπτωση θανουσης ασθενους γκν αθηνων α... | -1.0 | negative |
| 18900 | NatsisParisAlex | 13. Jul. 2021 | 18.0 | Twitter for Android | prefer not to say | χειροτερος βασιλακοπουλος εμβολιασμος κρουσματ... | 70 | χειροτερος βασιλακοπουλος εμβολιασμος κρουσματ... | -1.0 | negative |
| 19410 | radio4_GR | 13. Jul. 2021 | 1078.0 | Twitter for Android | prefer not to say | χριστινα μπομπα εκανε το εμβολιο και απαντησε ... | 81 | χριστινα μπομπα εκανε απαντησε υβριστικα σχολι... | -1.0 | negative |
| 19471 | luxus2110 | 13. Jul. 2021 | 35.0 | Twitter for Android | prefer not to say | χριστινα μπομπα εκανε το εμβολιο και απαντησε ... | 79 | χριστινα μπομπα εκανε απαντησε υβριστικα σχολι... | -1.0 | negative |
| 19674 | sunoo_trash | 13. Jul. 2021 | 294.0 | Twitter for Android | prefer not to say | ουτως η αλλως ξερουμε οτι τα νουμερα στα κρουσ... | 178 | ουτως αλλως ξερουμε νουμερα κρουσματα διαχειρι... | -1.0 | negative |
| 21020 | OuchGingerwowa | 14. Jul. 2021 | 667.0 | Twitter for Android | prefer not to say | οι χειροτερες παρενεργειες του εμβολιου ειναι ... | 160 | χειροτερες παρενεργειες εμβολιου αυτες δημιουρ... | -1.0 | negative |
| 21242 | m1QJv1FWkHKhWJt | 25. Jul. 2021 | 324.0 | Twitter for Android | prefer not to say | η αλεξανδρουπολη κατα της υποχρεωτικοτητας και... | 230 | αλεξανδρουπολη υποχρεωτικοτητας αθλιων μετρων ... | -1.0 | negative |
| 23923 | DJSurvivor2 | 30. July 2021 | 38.0 | Twitter Web App | prefer not to say | δεν ειναι ο χειροτερος πρωθυπουργος που περασε... | 232 | χειροτερος πρωθυπουργος περασε ελλαδα χειροτερ... | -1.0 | negative |
textblob_analysis[textblob_analysis.Polarity == 1.000000]
| Username | Date | Followers | Source | Location | Tweet | length | Tweet_without_stopwords | Polarity | label | |
|---|---|---|---|---|---|---|---|---|---|---|
| 1126 | Tsiraklas1 | 4. August 2021 | 5692.0 | Twitter for Android | prefer not to say | ποσο ποσο τελειο θα ηταν αν εβαζαν ορο για να ... | 155 | ποσο ποσο τελειο ηταν εβαζαν ορο παρουν αποζημ... | 1.0 | positive |
| 1176 | lemonita🍋🍋🍋 | 27. July 2021 | 311.0 | Twitter for Android | prefer not to say | υπουργαρα να ρωτησωεγω θελω να παω διακοπες σ... | 253 | υπουργαρα ρωτησωεγω θελω παω διακοπες σεπτεμβρ... | 1.0 | positive |
| 1656 | THIVAHELLAS | 27. July 2021 | 5672.0 | Twitter for Android | HELLAS | η καλυτερη διαφημιση για τα εμβολια ειναι ο ... | 131 | καλυτερη διαφημιση εμβολια εμβολιασμοι αντιεμβ... | 1.0 | positive |
| 1848 | Corona Mia | 27. July 2021 | 94.0 | Twitter Web App | Thessaloniki | τελειο εμβολιο αυτο αν το εκανε | 34 | τελειο εκανε | 1.0 | positive |
| 2655 | NIKOS VOUDOURIS | 26. July 2021 | 1714.0 | Twitter for iPhone | prefer not to say | το καλυτερο δωρο που μπορουμε να κανουμε στα π... | 122 | καλυτερο δωρο μπορουμε κανουμε παιδια προγραμμ... | 1.0 | positive |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 24023 | jedijig | 30. July 2021 | 3212.0 | Twitter for Android | prefer not to say | καλα εσυ εισαι πολυ ελκυστικος αντρας | 37 | καλα πολυ ελκυστικος αντρας | 1.0 | positive |
| 24642 | felologos | 31. July 2021 | 915.0 | Twitter for Android | prefer not to say | εμβολιο σοκολατας το καλυτερο εμβολιο | 38 | σοκολατας καλυτερο | 1.0 | positive |
| 24658 | Relax_Fun | 1. August 2021 | 2.0 | Twitter for Android | prefer not to say | και οι καλυτερες σειρες ειναι εδω απο ευρω το... | 162 | καλυτερες σειρες ευρω μηνα ετησια συνδρομη στε... | 1.0 | positive |
| 24746 | AlexandrosFL350 | 1. August 2021 | 8245.0 | Twitter for iPhone | Tropopause | συμφωνω η ελλαδα εχει υπεροχα ξερονησια να πατ... | 75 | συμφωνω ελλαδα υπεροχα ξερονησια πατε εκει χωρ... | 1.0 | positive |
| 24860 | Reina_gavrias | 1. August 2021 | 264.0 | Twitter Web App | prefer not to say | εδω μαλλον θα προηγηθουν οι αριστοι εμβολιασμο... | 58 | μαλλον προηγηθουν αριστοι εμβολιασμος νδσυμμορια | 1.0 | positive |
66 rows × 10 columns
textblob_analysis.describe()
| Followers | length | Polarity | |
|---|---|---|---|
| count | 2.533900e+04 | 25339.000000 | 25339.000000 |
| mean | 3.906660e+03 | 140.053199 | 0.028353 |
| std | 2.068079e+04 | 77.206449 | 0.238317 |
| min | 0.000000e+00 | 0.000000 | -1.000000 |
| 25% | 1.140000e+02 | 75.000000 | 0.000000 |
| 50% | 4.730000e+02 | 126.000000 | 0.000000 |
| 75% | 1.888000e+03 | 208.000000 | 0.100000 |
| max | 1.027903e+06 | 282.000000 | 1.000000 |
#Save dataframe
# textblob_analysis.to_csv('textblob_label.csv')
#Make a copy of our data
vader_analysis = tweets_df.copy()
sid = SentimentIntensityAnalyzer()
ps = lambda x : sid.polarity_scores(str(x))
vader_scores = vader_analysis.Translated.apply(ps)
vader_scores
0 {'neg': 0.302, 'neu': 0.698, 'pos': 0.0, 'comp...
1 {'neg': 0.303, 'neu': 0.57, 'pos': 0.127, 'com...
2 {'neg': 0.26, 'neu': 0.6, 'pos': 0.14, 'compou...
3 {'neg': 0.275, 'neu': 0.725, 'pos': 0.0, 'comp...
4 {'neg': 0.351, 'neu': 0.649, 'pos': 0.0, 'comp...
...
25334 {'neg': 0.5, 'neu': 0.0, 'pos': 0.5, 'compound...
25335 {'neg': 0.0, 'neu': 1.0, 'pos': 0.0, 'compound...
25336 {'neg': 0.0, 'neu': 1.0, 'pos': 0.0, 'compound...
25337 {'neg': 0.0, 'neu': 1.0, 'pos': 0.0, 'compound...
25338 {'neg': 0.234, 'neu': 0.766, 'pos': 0.0, 'comp...
Name: Translated, Length: 25339, dtype: object
#Make it a dataframe
sentiment_df_vader = pd.DataFrame(data = list(vader_scores))
sentiment_df_vader.head()
| neg | neu | pos | compound | |
|---|---|---|---|---|
| 0 | 0.302 | 0.698 | 0.000 | -0.8316 |
| 1 | 0.303 | 0.570 | 0.127 | -0.6395 |
| 2 | 0.260 | 0.600 | 0.140 | -0.3400 |
| 3 | 0.275 | 0.725 | 0.000 | -0.5849 |
| 4 | 0.351 | 0.649 | 0.000 | -0.4023 |
labelize = lambda x : 'neutral' if x==0 else('positive' if x>0 else 'negative')
sentiment_df_vader['label'] = sentiment_df_vader.compound.apply(labelize)
sentiment_df_vader.head()
| neg | neu | pos | compound | label | |
|---|---|---|---|---|---|
| 0 | 0.302 | 0.698 | 0.000 | -0.8316 | negative |
| 1 | 0.303 | 0.570 | 0.127 | -0.6395 | negative |
| 2 | 0.260 | 0.600 | 0.140 | -0.3400 | negative |
| 3 | 0.275 | 0.725 | 0.000 | -0.5849 | negative |
| 4 | 0.351 | 0.649 | 0.000 | -0.4023 | negative |
#Join dataframes
vader_data_with_compound = tweets_df.join(sentiment_df_vader.compound)
vader_data_with_compound.head()
vader_data_with_label = vader_data_with_compound.join(sentiment_df_vader.label)
vader_data_with_label.head(20)
| Username | Date | Followers | Source | Location | Tweet | length | Tweet_without_stopwords | Translated | compound | label | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | CaeruleusCalva | 4. August 2021 | 1088.0 | Twitter for Android | Not So Ancient Greece | οπως λενε και οι καθηγητες ωρλ τα ανεμβολιαστα... | 245 | λενε καθηγητες ωρλ ανεμβολιαστα ζωα πεθαινουν ... | say teachers unvaccinated animals die coronavi... | -0.8316 | negative |
| 1 | kambanellas | 4. August 2021 | 316.0 | Twitter for Android | Cyprus | δυστυχως τα δεδομενα δεν αλλαζουν ειτε σου αρε... | 206 | δυστυχως δεδομενα αλλαζουν ειτε αρεσει ειτε οχ... | unfortunately data changes whether you like it... | -0.6395 | negative |
| 2 | em56464 | 4. August 2021 | 116.0 | Twitter Web App | prefer not to say | χειροκροτουν τους πυροσβεστες μεχρι να σβησει ... | 114 | χειροκροτουν πυροσβεστες μεχρι σβησει φωτια κα... | applause firefighters until fire extinguished ... | -0.3400 | negative |
| 3 | zetakosmatougk | 4. August 2021 | 2955.0 | Twitter for Android | greece | εχετε μισο λεπτο να σας μιλησω για το εμβολιο ... | 113 | εχετε μισο λεπτο μιλησω μητσοτακηκαθαρμα φωτι… | you have half a minute to talk mitsotaki fucki... | -0.5849 | negative |
| 4 | PeterParker_84 | 4. August 2021 | 149.0 | Twitter Web App | Timbuktu Κάτω Αχαίας | σκεψου ουτε οι ιδιοι δεν εμπιστευονται το εμβο... | 55 | σκεψου ιδιοι εμπιστευονται | they dont even trust the vaccine | -0.4023 | negative |
| 5 | EvgenTzavaras | 4. August 2021 | 1813.0 | Twitter for Android | prefer not to say | ημαρτον ξεστραβωθειτε ειστε και πιτσιρικαδες... | 217 | ημαρτον ξεστραβωθειτε πιτσιρικαδες ασχημο κολλ... | fuck get out of the way little ones ugly stick... | -0.4804 | negative |
| 6 | Faklana38 | 4. August 2021 | 1091.0 | Twitter for Android | Bachelor τσαρδί | εχετε μισο λεπτο να σας μιλησω για το εμβολιο ... | 113 | εχετε μισο λεπτο μιλησω μητσοτακηκαθαρμα φωτιες | you have half a minute to talk about mitsotaki... | -0.5423 | negative |
| 7 | e_thessalia | 4. August 2021 | 2200.0 | E-ThessaliaAutoPosting | Volos, Greece | το εμβολιο της αναμενεται να εξασφαλισει πληρ... | 74 | αναμενεται εξασφαλισει πληρη εγκριση αρχες σεπ... | is expected to secure full approval in early s... | 0.6705 | positive |
| 8 | TheW0lfpup | 4. August 2021 | 2988.0 | Twitter for Android | prefer not to say | α δηλαδη για το εμβολιο εχει μια σταση γιατι ... | 151 | δηλαδη σταση γιατι γιατρος ολες μπαρουφες ανεβ... | that is stop because a doctor raises all the b... | 0.0772 | positive |
| 9 | NemesisEfialtis | 4. August 2021 | 110.0 | Twitter Web App | Αθήνα | η πιθανοτητα να παθει κατι καποιος απο εμβολιο... | 268 | πιθανοτητα παθει καποιος μικροτερη παθει κοβιν... | probability gets someone smaller gets covid st... | 0.0000 | neutral |
| 10 | AlexGriva | 4. August 2021 | 59.0 | Twitter for Android | Κέρκυρα, Ελλάς | σημερα ελεγα ποσο τυχερη νιωθω που στον κυκλο ... | 205 | σημερα ελεγα ποσο τυχερη νιωθω κυκλο εναν ανεμ... | today i was saying how lucky i feel to be in a... | 0.4215 | positive |
| 11 | Lunaticus_9 | 4. August 2021 | 41.0 | Twitter Web App | prefer not to say | τωρα νομιζεις οτι εχεις εμβολιο γελανε και οι... | 83 | τωρα νομιζεις εχεις γελανε πετρες καλη προστασ... | now do you think you have laughed stones good ... | 0.8225 | positive |
| 12 | malaganas | 4. August 2021 | 17.0 | Twitter for Android | prefer not to say | εσεις κυριε το εχετε κανει το εμβολιο\n\n\nλιμ... | 87 | εσεις κυριε εχετε κανει λιμνη ευβοιας φωτια βα... | you sir have made a lake firebomb | 0.0000 | neutral |
| 13 | katerinas_diary | 4. August 2021 | 1407.0 | Twitter for Android | Athens, Greece | απο το ενας προφητης χωριςγενεια ζακ ατταλι... | 168 | ενας προφητης χωριςγενεια ζακ ατταλι μιλαει πα... | a prophet homeless zak attali speaks pandemic ... | -0.4404 | negative |
| 14 | SigmaTotal | 4. August 2021 | 308.0 | Twitter Web App | Ελλάς | ποσο αηδιασμενοι εισαστε απο την ελληνικη ακ... | 115 | ποσο αηδιασμενοι εισαστε ελληνικη ακαδημαικη π... | how disgusted are you greek academic spiritual... | -0.2111 | negative |
| 15 | Flashgr_ | 4. August 2021 | 778.0 | Flash Twitter Auto Publish | prefer not to say | εκαναν κουκλα την επιστημονα που σχεδιασε το ... | 61 | εκαναν κουκλα επιστημονα σχεδιασε | made doll scientist designed | 0.0000 | neutral |
| 16 | giatokalomoy | 4. August 2021 | 156.0 | Twitter for Android | prefer not to say | πως τα φερνει η ζωη καλουν την ανεμβολιαστη εμ... | 122 | φερνει ζωη καλουν ανεμβολιαστη εμακ «αποδεκατι... | brings life call unvaccinated emak decimated h... | 0.4019 | positive |
| 17 | agrinio24gr | 4. August 2021 | 4460.0 | AGRINIO24.COM | prefer not to say | ερευνα εκπα ποσο διατηρειται η ανοσια που προσ... | 70 | ερευνα εκπα ποσο διατηρειται ανοσια προσφερει | research on how much immunity is offered | 0.0000 | neutral |
| 18 | OpwsPalia | 4. August 2021 | 76.0 | Twitter for Android | Cyprus | θα μου υπογραψεις κ εμενα σε παρακαλω συμβολαι... | 275 | υπογραψεις εμενα παρακαλω συμβολαιο μιας τσιμπ... | signatures me please contract a sting you need... | 0.7650 | positive |
| 19 | Alexand06801590 | 4. August 2021 | 5.0 | Twitter for iPhone | prefer not to say | οσοι δεν εχουν κανει το εμβολιο να φυγουν απο ... | 68 | οσοι κανει φυγουν θεση αμεσως | those who do leave immediately | -0.0516 | negative |
#Drop english column
vader_data_with_label.drop('Translated', axis=1, inplace=True)
Καλώντας τη συνάρτηση describe() μπορούμε να πάρουμε μερικά στατιστικά στοιχεία για τη πολικότητα των tweets. Βρήσκοντας τα tweets με τη πιο μικρή και πιο μεγάλη πολυκότητα μπορούμε να βρούμε το πιο αρνητικό και το πιο θετικό tweet.
vader_data_with_label.compound.describe()
count 25339.000000 mean -0.022033 std 0.430757 min -0.984700 25% -0.318200 50% 0.000000 75% 0.273200 max 0.997000 Name: compound, dtype: float64
Βλέπουμε ότι το πιο θετικό tweet έχει χαρακτηριστεί με τη κλάση θετικό λόγω των πολλών emojis τα οποία περιέχει. Αυτό αποτελεί ψευδώς θετικό tweet αφού στην ουσία περιέχει ειρωνία.
vader_data_with_label[vader_data_with_label.compound == 0.997000]
| Username | Date | Followers | Source | Location | Tweet | length | Tweet_without_stopwords | compound | label | |
|---|---|---|---|---|---|---|---|---|---|---|
| 1788 | Tsiribim tsiribοm | 27. July 2021 | 1658.0 | Twitter Web App | prefer not to say | για να μην πουμε και αυτο το οσοι εχουν κανει ... | 188 | πουμε οσοι κανει νοσουν βαρια τελικα κανει οχι... | 0.997 | positive |
vader_data_with_label['Tweet_without_stopwords'][1788]
'πουμε οσοι κανει νοσουν βαρια τελικα κανει οχι τιποτα ανεβασει σελφι μπρατσο εξω🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣'
# import emoji
# tweets_df['Tweet_without_stopwords'] = [emoji.demojize(str(tweet)) for tweet in tweets_df.Tweet_without_stopwords]
# tweets_df['Tweet_without_stopwords'] = tweets_df['Tweet_without_stopwords'].str.replace(r'[a-zA-Z0-9]', '', regex=True)
# remove_puncs = lambda x: x.translate(str.maketrans('','',string.punctuation))
# tweets_df['Tweet_without_stopwords'] = tweets_df.Tweet_without_stopwords.apply(remove_puncs)
# tweets_df['Tweet_without_stopwords']
vader_data_with_label[vader_data_with_label.compound == -0.984700]
| Username | Date | Followers | Source | Location | Tweet | length | Tweet_without_stopwords | compound | label | |
|---|---|---|---|---|---|---|---|---|---|---|
| 3353 | Dimos | 25. July 2021 | 15.0 | Twitter Web App | prefer not to say | απο το θανατηφορο εμβολιο φυσικααπο τι αλλο μπ... | 261 | θανατηφορο φυσικα απο μπορει πεθανε ενας χρονο... | -0.9847 | negative |
vader_data_with_label['Tweet_without_stopwords'][3353]
'θανατηφορο φυσικα απο μπορει πεθανε ενας χρονος ψευτοιο πεθανε αλλωστε ενας ψευτοιος σκοτωνει αλλωστε το λεω γιατι εχουμε επαναληψη προηγουμενης απατης ψευτοιου ηναυτα λεγανε πανδημια κουραφεξαλα'
#Save vader data file
vader_data_with_label.to_csv('vader_with_label.csv')
#Visualisation of both
vader_pie = [len(vader_data_with_label[vader_data_with_label['label'] == 'positive']),
len(vader_data_with_label[vader_data_with_label['label'] == 'negative']),
len(vader_data_with_label[vader_data_with_label['label'] == 'neutral'])]
blob_pie = [len(textblob_analysis[textblob_analysis['label'] == 'positive']),
len(textblob_analysis[textblob_analysis['label'] == 'negative']),
len(textblob_analysis[textblob_analysis['label'] == 'neutral'])]
labels = ['Positive', 'Negative', 'Neutral']
colors = ['aquamarine', 'tomato', 'skyblue']
Ανάλυση ποσοστού tweets ανά κατηγορία συναισθήματος με δυο διαφορετικές προσεγγίσεις. Βλέπουμε ότι οι δυο προσεγγίσεις που ακολουθήσαμε έχουν σχεδόν το ίδιο ποσοστό θετικών δημοσιεύσεων οστώσο υπάρχει μεγάλη διαφοριοποίηση στα αρνητικά αποτελέσματα.
plt.style.use('ggplot')
plt.figure(figsize = (20, 10))
plt.subplot(1, 2, 1)
plt.pie(vader_pie, labels = labels, colors = colors, autopct = '%1.1f%%')
plt.title('Ανάλυση συναισθήματος με Vader')
plt.subplot(1, 2, 2)
plt.pie(blob_pie, labels = labels, colors = colors, autopct = '%1.1f%%')
plt.title('Ανάλυση συναισθήματος με TextBlob');
#Count the labels
counts_df_vader = vader_data_with_label.label.value_counts().reset_index()
counts_df_vader
| index | label | |
|---|---|---|
| 0 | negative | 9022 |
| 1 | positive | 8305 |
| 2 | neutral | 8012 |
counts_df_textblob = textblob_analysis.label.value_counts().reset_index()
counts_df_textblob
| index | label | |
|---|---|---|
| 0 | neutral | 11010 |
| 1 | positive | 8461 |
| 2 | negative | 5868 |
Βλέπουμε τη διακίμανση του συναισθήματος των tweets καταμετρόντας τα σύμφωνα με την ημερομηνία και τη κλάση τους και για τις δυο προσεγγίσεις.
#Vader counts
data_agg_vader = vader_data_with_label[['Tweet', 'Date', 'label']].groupby(['Date', 'label']).count().reset_index()
data_agg_vader.columns = ['date','label','counts']
data_agg_vader.head()
| date | label | counts | |
|---|---|---|---|
| 0 | 1. August 2021 | negative | 320 |
| 1 | 1. August 2021 | neutral | 237 |
| 2 | 1. August 2021 | positive | 232 |
| 3 | 13. Jul. 2021 | negative | 610 |
| 4 | 13. Jul. 2021 | neutral | 586 |
#Vader line visualisation
px.line(data_agg_vader, x = 'date', y = 'counts', color = 'label', title = 'Daily tweets sentimental Analysis with Vader method')
data_agg_textblob = textblob_analysis[['Tweet', 'Date', 'label']].groupby(['Date', 'label']).count().reset_index()
data_agg_textblob.columns = ['date','label','counts']
data_agg_textblob.head()
| date | label | counts | |
|---|---|---|---|
| 0 | 1. August 2021 | negative | 227 |
| 1 | 1. August 2021 | neutral | 299 |
| 2 | 1. August 2021 | positive | 263 |
| 3 | 13. Jul. 2021 | negative | 371 |
| 4 | 13. Jul. 2021 | neutral | 811 |
px.line(data_agg_textblob, x = 'date', y = 'counts', color = 'label', title = 'daily tweets sentimental Analysis with Textblob')